package com.eystar.ext.kit.tree;

import java.util.ArrayList;
import java.util.List;

/**
 * 
 * 描述：获得树形的服务实现<br>
 * 作者： zhangjian
 */
public class TreeKit {

	public static List<BaseTree> getChildTreeObjects(List<BaseTree> list, String parentId) {
		List<BaseTree> returnList = new ArrayList<BaseTree>();
		for (BaseTree res : list) {
			// 判断第一个对象是否为第一个节点
			if (parentId.equals(res.getParentId())) {
				// 相等--说明第一个节点为父节点--递归下面的子节点
				recursionFn(list, res);
				returnList.add(res);
			}
		}
		return returnList;
	}

	/**
	 * 递归列表
	 * 
	 * @param list
	 * @param tree
	 * @author zhangjian
	 */
	public static void recursionFn(List<BaseTree> list, BaseTree tree) {
		List<BaseTree> childsList = getChildList(list, tree);
		// 设置他的子集对象集
		tree.setChildren(childsList);
		// 迭代--这些子集的对象--时候还有下一级的子级对象
		for (BaseTree nextChild : childsList) {
			// 下一个对象，与所有的资源集进行判断
			if (hasChild(list, nextChild)) {
				// 有下一个子节点,递归
				for (BaseTree node : childsList) {
					// 所有的对象--跟当前这个childsList 的对象子节点
					recursionFn(list, node);
				}
			}
		}
	}

	/**
	 * 获得指定节点下的所有子节点
	 * 
	 * @param list
	 * @param tree
	 * @return
	 * @author zhangjian
	 */
	public static List<BaseTree> getChildList(List<BaseTree> list, BaseTree tree) {
		List<BaseTree> childsList = new ArrayList<BaseTree>();
		for (BaseTree child : list) {
			// 判断集合的父ID是否等于上一级的id
			if (child.getParentId().equals(tree.getId())) {
				childsList.add(child);
			}
		}
		return childsList;
	}

	/**
	 * 判断是否还有下一个子节点
	 * 
	 * @param list
	 * @param tree
	 * @return
	 * @author zhangjian
	 */
	public static boolean hasChild(List<BaseTree> list, BaseTree tree) {
		return getChildList(list, tree).size() > 0 ? true : false;
	}
}